package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.TeacherCourseEntity;
import com.tfjybj.itoo.teach.model.TeacherCourseAndCourseModel;
import com.tfjybj.itoo.teach.model.TeacherCourseModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * TeacherCourseService接口
 * teacherCourse表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface TeacherCourseService extends BaseServicePlus<TeacherCourseEntity> {
	
	//region 模板生成：模糊查询


	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据课程_id模糊查询teacherCourse
     *
     * @param courseId  课程_id
     * @return 模糊查询的teacherCourse
     * @author 郄子硕
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<TeacherCourseModel> queryByLikeCourseId(String courseId);

    //region 根据课程id查询
    /**
     * 根据课程id查询teacherCourse
     *
     * @param courseId  课程Id
     * @return 查询的teacherCourse
     * @author 郄子硕
     * @since 2.0.0 2018-11-10 15:05:05
     */
    PageInfo<TeacherCourseEntity> queryTeacherCourseListByCourseId(String courseId);

    /**
     * 根据课程id查询teacherCourse
     *
     * @param teacherId  教师Id
     * @return TeacherCourseAndCourseModel
     * @author 郄子硕
     * @since 2.0.0 2018-11-10 20:52:30
     */
    PageInfo<TeacherCourseAndCourseModel> queryTeacherCourseAndCourse(String teacherId);


    /**
     * 根据课程id集 查询授课教师集和
     *
     * @param ids ids
     * @return ItooResult 教师授课表List
     * @author 郄子硕
     * @since 2.0.0 2018-11-12 13:48:22
     */
    PageInfo<TeacherCourseModel> queryTeacherCourseByIds(@Param("list") List<String> ids);

    /**
     * 根据学年学期、教师_id和课程_id 查询TeacherCourse表
     *
     * @param teacherId  教师Id
     * @param courseId  课程Id
     * @param schoolYear  学年学期
     * @return TeacherCourseAndCourseModel
     * @author 郄子硕
     * @since 2.0.0 2018-11-28 14:44:04
     */
    PageInfo<TeacherCourseModel> queryByTeacherIdAndCourseIdAndYear(String teacherId, String courseId, String schoolYear);

    /**
     * 查询全部授课信息（分页，带code）
     *
     * @param pageNo  当前页
     * @param pageSize 每页条数
     * @return 授课信息
     * @author 郄子硕
     * @since 2.0.0 2018-11-16 09:49:52
     */
    PageInfo<TeacherCourseModel> queryAllTeacherCourse(Integer pageNo, Integer pageSize);
    /**
     * 组合模糊查询全部授课信息（分页，带code）
     *
     * @return 授课信息
     * @author 郄子硕
     * @since 2.0.0 2018-12-12 16:29:07
     */
    PageInfo<TeacherCourseModel> queryListByTeacherAndCourse(String courseName, String teacherName, String schoolYear, Integer pageNum, Integer pageSize);

    /**
     * 根据关键词模糊查询课程名称或教师姓名
     *
     * @param strLike 课程名称或教师姓名关键词
     * @return 查询的teachercourse
     * @author 郄子硕
     * @since 2.0.0 2018-12-12 20:15:10
     */
    PageInfo<TeacherCourseModel> queryTeacherCourseByCodeAndNameStrLike(Integer pageNum, Integer pageSize, String strLike);
    /**
     * 查询全部授课信息（不分页，带code）
     *
     * @return 授课信息
     * @author 郄子硕
     * @since 2.0.0 2018-11-16 09:49:52
     */
    List<TeacherCourseModel> queryAllTeacherCourse();

    /**
     * 添加（一键组合）
     *
     * @param model TeacherCourseModel
     * @return 添加结果
     * @author 郄子硕
     * @since 2.0.0 2018-11-19 09:59:46
     */
    boolean addList(TeacherCourseModel model);

    /**
     * 导出
     *
     * @return 导出excel
     * @author 郄子硕
     * @since 2018-11-27 14:42:36
     */
    ItooResult exportTeacherCourseInfo(HttpServletResponse response);

    /**
     * 下载模板-导入用
     *
     * @param response
     * @return 下载成功或失败
     * @author 郄子硕
     * @since 2018-11-27 20:42:13
     */
    Boolean downTemplate(HttpServletResponse response);


    /**
     * 导入教师授课信息
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @return itooresult 批量导入的结果
     * @author 郄子硕
     * @since 2018-11-28 15:07:54
     */
    ItooResult importTeacherCourse(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 教师授课信息model
     * @author 郄子硕
     * @since 2018-12-2 12:44:18
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);



}
